#ifndef __MESSAGES_H
#define __MESSAGES_H


#define DEBUG()            debug( __FILE__, __LINE__, __FUNCTION__, "", "" )
#define DEBUG1(A)          debug( __FILE__, __LINE__, __FUNCTION__, (A), "" )
#define DEBUG2(A,B)        debug( __FILE__, __LINE__, __FUNCTION__, (A), (B) )

#define DEBUG_INT(A,B)     debugInt( __FILE__, __LINE__, __FUNCTION__, (A), (B) )
#define DEBUG_DOUBLE(A,B)  debugInt( __FILE__, __LINE__, __FUNCTION__, (A), (B) )

#define INFO_INT(A,B)      infoInt( __FILE__, __LINE__, __FUNCTION__, (A), (B) )
#define INFO_DOUBLE(A,B)   infoDouble( __FILE__, __LINE__, __FUNCTION__, (A), (B) )
#define INFO_STRING(A,B)   infoString( __FILE__, __LINE__, __FUNCTION__, (A), (B) )

#define ERROR()            error( __FILE__, __LINE__, __FUNCTION__, "", "" )
#define ERROR1(A)          error( __FILE__, __LINE__, __FUNCTION__, (A), "" )
#define ERROR2(A,B)        error( __FILE__, __LINE__, __FUNCTION__, (A), (B) )

#define WARNING()          warning( __FILE__, __LINE__, __FUNCTION__, "", "" )
#define WARNING1(A)        warning( __FILE__, __LINE__, __FUNCTION__, (A), "" )
#define WARNING2(A,B)      warning( __FILE__, __LINE__, __FUNCTION__, (A), (B) )


enum LogLevel
{
    LOGLEVEL_QUIET,
    LOGLEVEL_NORMAL,
    LOGLEVEL_VERBOSE,
    LOGLEVEL_DEBUG
};


void infoInt( char *, int , const char *, const char *, const int );
void infoDouble( char *, int , const char *, const char *, const double );
void infoString( char *, int , const char *, const char *, const char * );
void debug( char *, int , const char *, char *, char * );
void debugInt( char *, int , const char *, char *, int );
void debugDouble( char *, int , const char *, char *, double );
void warning( char *, int , const char *, char *, char * );
void error( char *, int , const char *, const char *, const char * );

void setLogLevel(int);

#endif
